package entidades;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import javax.xml.parsers.SAXParser;

public class InteraccionServidor{
/**
 * esto es un comentario java DOC. Poner el que hace cada metro despues
 * @param parametros
 * @return retorna tal cosa si
 * si tiene menos de 10 lineas de codigo no hace falta (osea todos los getters y blbal)
 */
	
	public final static int REGISTRAR=0;
	public final static int ENVIAR=1;
	public final static int CONSULTAR=2;
	public final static String url = "http://192.168.1.4:8080/MessageSender/";
	private final static String contrasenia="123456";
	
	
	public String comunicacionServidor(String nombre,int tipoComunicacion,String destinatario,String mensaje) {
		String r="";	
		
		
		try {
				URL u = new URL(url); 
		        URLConnection c = u.openConnection();

		        c.setDoOutput(true);
		        if (c instanceof HttpURLConnection) {
		                ((HttpURLConnection)c).setRequestMethod("POST");
		        }

		        OutputStreamWriter out = new OutputStreamWriter(
		        c.getOutputStream());
                out.write(getConsulta(nombre,tipoComunicacion,destinatario,mensaje));
		        out.close();
                
		        BufferedReader in = new BufferedReader(
		                            new InputStreamReader(
		                                c.getInputStream()));
  
		      String s="";
		        while ((s = in.readLine()) != null) {
		                r+=in.readLine();
		        }       
	       
		        in.close();
		
		        
		        
			}
			catch (Exception e) {
				e.printStackTrace();
			}
			return r;
		}
	public RegistroUsuarioHandler parserRegistrarUsuario(int tipoComunicacion,String nombre,String destinatario,String mensaje){
		RegistroUsuarioHandler usuario = new RegistroUsuarioHandler();
		try{
		
        SAXParser parser = XmlParserProvider.getParser();       
        parser.parse(new ByteArrayInputStream(this.comunicacionServidor(nombre, tipoComunicacion, destinatario, mensaje).getBytes()), usuario);
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		
        return usuario;
        
	}
	public EnvioMensajeHandler parserEnviarMensaje(int tipoComunicacion,String nombre,String destinatario,String mensaje){
		
		EnvioMensajeHandler mensajeH = new EnvioMensajeHandler();
		try{
		
        SAXParser parser = XmlParserProvider.getParser();       
        parser.parse(new ByteArrayInputStream(this.comunicacionServidor(nombre, tipoComunicacion, destinatario, mensaje).getBytes()), mensajeH);
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		
        return mensajeH;
	}

	public String getConsulta(String nombre,int tipoComunicacion,String destinatario,String mensaje){
		String detalle=" ",tipo=" ",fechaUltimaConsulta=" ";
		switch (tipoComunicacion) {
        case REGISTRAR:
                tipo= "register-user";
                detalle= "<user username='" + nombre + "' password='" + contrasenia +"'/>";
                break;
        case ENVIAR:
                tipo= "send-message";
                detalle= "<auth username='" + nombre + "' key='" + contrasenia + "'></auth>" +
                                 "<message to='"+ destinatario +"'><![CDATA["+ mensaje +"]]></message>";
                break;
        case CONSULTAR:
                tipo= "get-messages";
                detalle= "<auth username='" + nombre +"' key='" + contrasenia + "'></auth>" +
                                 "<filter type='timestamp'>" + fechaUltimaConsulta + "</filter>";
                break;
     }
String xml= "<action id='REQUEST_RANDOM_VALUE' name='" + tipo + "'><action-detail>";
xml+= detalle;
xml+= "</action-detail></action>";

return xml;
}
	
	
	
	}
	 




